package inline

import java.util.concurrent.Executors

inline fun test(printer: () -> Unit): Boolean {
    (1..3).forEach {
        printer()
        if (it == 2) return false
    }
    return true
}

val executor = Executors.newCachedThreadPool()

// 直接内联代码，lambda函数 允许直接返回
inline fun runTaskBlocking(task: () -> Unit) {
    task()
}

// 当 内联lambda函数 参数，在其他 匿名函数或对象 使用时，无法直接返回（non-local return）
inline fun runTask(crossinline task: () -> Unit) {
    executor.submit {
        task()
    }
}

fun main(args: Array<String>) {
    runTaskBlocking {
        println("run task blocking")
        return
    }

    runTask {
        println("run task")
        // crossinline 不支持直接返回
        // return
    }
}